package com.lock8;

import java.util.concurrent.TimeUnit;
/**
 *  3.类中增加一个普通方法 ，2个线程先打印 A 还是 普通方法 ->根据延时的时间判断
 *                                             因为普通方法调用在A方法调用下面,主线程延时小于A方法就会先打印普通方法
 *  4. 生产 2个Data2实例对象 ，2个锁了的方法 线程先打印 A 还是 B ->主线程延时小于A方法延时则是B 等于不稳定 大于必定是A
 *   2个对象即 2个锁
 * */
public class Test2 {
    public static void main(String[] args) {
        Data2 data = new Data2();
        Data2 data2 = new Data2();
        new Thread(data::sendA).start();
        try {
            TimeUnit.SECONDS.sleep(2);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
//        new Thread(data::sendB).start();
        new Thread(data2::sendB).start();
    }
}
class Data2{

    //synchronized 锁的对象是方法的调用者
    public synchronized void sendA(){
        try {
            TimeUnit.SECONDS.sleep(2);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("AA");
    }
    public synchronized void sendB(){
        System.out.println("BB");
    }
    public void hello(){
        System.out.println("hello");
    }
}